package com.glasses.manage.core.dao;

import com.glasses.manage.core.entity.PageBean;
import com.glasses.manage.core.entity.PageParam;
import org.apache.ibatis.session.SqlSession;

import java.util.List;
import java.util.Map;

/**
 * @描述: 数据访问层基础支撑接口.
 * @作者: yy
 * @创建时间: 2016/12/15
 * @版本: 1.0
 */
public interface BaseDao<T> {

    /**
     * 根据实体对象新增记录
     *
     * @return id  插入记录的ID
     */
    long insert(T entity);

    /**
     * 批量保存对象
     *
     * @return id
     */
    long insert(List<T> list);

    /**
     * 更新实体对应的记录
     *
     * @return 插入记录的ID
     */
    int update(T entity);

    int update(Map<String, Object> paramMap, String sqlId);

    /**
     * 批量更新对象
     *
     * @return int  影响行数
     */
    int update(List<T> list);

    /**
     * 根据ID查找记录
     */
    T getById(long id);

    /**
     * 根据ID删除记录
     *
     * @return 影响行数
     */
    int deleteById(long id);

    /**
     * 根据ID删除记录
     *
     * @return 影响行数
     */
    int deleteByIds(List<Long> ids);

    /**
     * 根据条件删除记录
     *
     * @param paramMap 删除条件
     * @return 影响行数
     */
    int delete(Map<String, Object> paramMap);

    int delete(Map<String, Object> paramMap, String sqlId);


    PageBean listPage(PageParam pageParam, Map<String, Object> paramMap);

    PageBean listPage(PageParam pageParam, Map<String, Object> paramMap, String sqlId);

    /**
     * 分页查询
     *
     * @param pageParam  分页参数，必须传
     * @param paramMap   查询的参数
     * @param sqlId      查询列表的sql语句
     * @param countSqlId 统计查询的sql语句
     * @return 封装好的结果集对象
     */
    PageBean listPage(PageParam pageParam, Map<String, Object> paramMap, String sqlId, String countSqlId);

    /**
     * 根据条件查询
     *
     * @param paramMap
     * @return 返回集合
     */
    List<T> listBy(Map<String, Object> paramMap);

    <E> List<E> listBy(Map<String, Object> paramMap, String sqlId);

    /**
     * 根据条件查询
     *
     * @param paramMap
     * @return 返回实体
     */
    T getBy(Map<String, Object> paramMap);

    Object getBy(Map<String, Object> paramMap, String sqlId);


    SqlSession getSqlSession();
}
